package main

import (
	"fmt"
)

// ////////////n的阶乘 Start/////////////////////////////
// n的阶乘--递归
func factorial1(n int) int {
	if n <= 0 {
		return 1
	}
	return n * factorial1(n-1)

}

// n的阶乘--循环
func factorial2(n int) int {
	num := 1
	for i := 1; i <= n; i++ {
		num *= i
	}
	return num
}

//////////////n的阶乘 End/////////////////////////////

// 从1~12顺序打印
func triangle_1(n int) {
	for i := 1; i <= n; i++ {
		for j := n; j > i; j-- {
			if j > 9 {
				fmt.Print("   ")
			} else {
				fmt.Print("  ")
			}
		}
		for k := i; k > 0; k-- {
			fmt.Printf("%v ", k)
		}
		fmt.Println()
	}
}

// 从12~1顺序打印
func triangle_12(n int) {
	for i := n; i >= 1; i-- {
		for j := 0; j <= i; j++ {
			if j > 10 {
				fmt.Print("   ")
			} else if j > 1 {
				fmt.Print("  ")
			} else {
				continue
			}
		}
		for k := i; k <= n; k++ {
			fmt.Printf("%v ", k)
		}
		fmt.Println()
	}
}

func main() {
	fmt.Print("// n的阶乘--递归: ")
	fmt.Println(factorial1(10))
	fmt.Print("// n的阶乘--循环: ")
	fmt.Println(factorial2(10))
	fmt.Println("// 三角形正序")
	triangle_1(15)
	fmt.Println("// 三角形倒序")
	triangle_12(15)
	def(1)

}

func def(n int) {
	defer func() {
		fmt.Println("aaa")
	}()
	defer fmt.Println("111")
	if n < 0 {
		panic("n 小于 0")
	}
	return
	/*
		总结：
		defer 的作用是延迟执行，defer后面只能执行函数调用或方法调用， 当出现多个defer时，从上至下注册，执行时是从下往上顺序执行。
		defer 常应用于文件处理、网络连接、资源操作等，防止打开后遇到报错无法正常关闭，使用defer进行关闭释放资源。
	*/

}
